7. Apache Spark: RDD, DataFrame/DataSet
Standalone Hadoop кластер на ОС Widnows
Пререквизиты
Установлена Java 8
Установлена переменная окружения JAVA_HOME
Используемая версия hadoop: hadoop-2.8.3
Путь к hadoop_home на файловой системе: c:\dev\hadoop
В качестве образца используется инструкция https://github.com/MuhammadBilalYar/Hadoop-On-Window/wiki/Step-by-step-Hadoop-2.8.0-installation-on-Window-10
Инструкция
Загрузка и подготовка дистрибутива
- Загрузите дистрибутив hadoop с официального сайта https://archive.apache.org/dist/hadoop/common/. Из папки hadoop-2.8.3 заберите hadoop-2.8.3.tar.gz
- Распакуйте файлы из tar.gz в директорию c:\dev\hadoop
- Загрузите winutils для hadoop с сайта https://github.com/steveloughran/winutils в виде архива zip (файл winutils-master.zip)
- Из архива winutils-master.zip из папки winutils-master\hadoop-2.8.3\bin скопируйте все файлы с расширениями dll, exp, lib, exp, exe в папку c:\dev\hadoop\hadoop-2.8.3\bin
Конфигурация
-
Создайте директорию c:\dev\hadoop\data и две поддиректории c:\dev\hadoop\data\namenode и c:\dev\hadoop\data\datanode . В этих директориях кластер будет хранить данные namenode и datanode
-
Файлы конфигурации находятся в директории c:\dev\hadoop\hadoop-2.8.3\etc\hadoop
-
Добавьте в файл core-site.xml в тэг <configuration> (между <configuration> и </configuration>)
\<property\>
\<name\>fs.defaultFS\</name\>
\<value\>hdfs://localhost:9000\</value\>
\</property\> -
Переименуйте файл mapred-site.xml.template в mapred-site.xml и добавьте в него в тэге <configuration>
\<property\>
\<name\>mapreduce.job.user.name\</name\>
\<value\>%USERNAME%\</value\>
\</property\>
\<property\>
\<name\>mapreduce.framework.name\</name\>
\<value\>yarn\</value\>
\</property\>
\<property\>
\<name\>yarn.apps.stagingDir\</name\>
\<value\>/user/%USERNAME%/staging\</value\>
\</property\>
\<property\>
\<name\>mapreduce.jobtracker.address\</name\>
\<value\>local\</value\>
\</property\> -
В файле yarn-site.xml в тэг <configuration> добавьте
\<property\>
\<name\>yarn.nodemanager.aux-services\</name\>
\<value\>mapreduce_shuffle\</value\>
\</property\>
\<property\>
\<name\>yarn.nodemanager.auxservices.mapreduce.shuffle.class\</name\>
\<value\>org.apache.hadoop.mapred.ShuffleHandler\</value\>
\</property\> -
В файле hdfs-site.xml в секцию <configuration> добавьте replication factor и пути, где кластер будет хранить данные для namenode и datanode
\<property\>
\<name\>dfs.replication\</name\>
\<value\>1\</value\>
\</property\>
\<property\>
\<name\>dfs.namenode.name.dir\</name\>
\<value\>c:\dev\hadoop\hadoop-2.8.3\data\namenode\</value\>
\</property\>
\<property\>
\<name\>dfs.datanode.data.dir\</name\>
\<value\>c:\dev\hadoop\hadoop-2.8.3\data\datanode\</value\>
\</property\>
Запуск и проверка
-
Запустите консоль (команда cmd)
-
В консоли выполните (в принципе это нужно выполнять всякий раз, когда нужно будет работать с кластером)
set HADOOP_HOME=c:\dev\hadoop\hadoop-2.8.3
set HADOOP_CONF_DIR=%HADOOP_HOME%\etc\hadoop
set PATH=%PATH%;%HADOOP_HOME%\sbin;%HADOOP_HOME%\bin -
Выполните форматирование namenode. Помните, что при повторном форматировании из кластера будут удалены все данные.
hdfs.cmd namenode -format -
Запустите кластер
start-all.cmd -
Должны запуститься без ошибок 4 демона в 4-х консолях. Имена консолей:
- Apache Hadoop Distiribution - hadoop namenode
- Apache Hadoop Distiribution - hadoop datanode
- Apache Hadoop Distiribution - yarn nodemanager
- Apache Hadoop Distiribution - yarn resourcemanager
-
По ссылке http://localhost:8088 должен быть доступен yarn recourse manager UI
-
По ссылке http://localhost:50070 доступен Namenode information сайт.
-
Положите в hdfs какой-нибудь файл (для примера выбран winutils-master.zip)
hdfs dfs -copyFromLocal winutils-master.zip / -
Проверьте, что файл был загружен
hdfs dfs -ls /
Пример запуска mapreduce задачи
Проект: wordcount.zip
Проект содержит собранный jar-файл в папке target. Однако проект можно собрать maven-ом.
Запустите консоль в корне проекта (там где лежит файл pom.xml). Выполните:
set HADOOP_HOME=<path to you hadoop>
set HADOOP_CONF_DIR=%HADOOP_HOME%\etc\hadoop
set PATH=%PATH%;%HADOOP_HOME%\sbin;%HADOOP_HOME%\bin
rem copy file to hdfs
hadoop fs -copyFromLocal spark-sql.txt /
rem check if file was copied to hdfs
hadoop fs -ls /
rem run mapreduce job on cluster
hadoop jar target\wordcount-1.0-SNAPSHOT.jar com.pva.mr.wordcount.WordCount /spark-sql.txt /out
rem copy files from hdfs
hadoop fs -copyToLocal /out
rem delete directory from hdfs
hadoop fs -rm -r /out
Логи запуска будут доступны по адресу http://localhost:8088
Пример запуска spark задачи
Проект: spark-1.6.3-introduction.zip
Проект содержит собранный jar-файл в папке target. Однако проект можно собрать maven-ом.
Запустите консоль в корне проекта (там где лежит файл pom.xml). Выполните:
set HADOOP_HOME=D:\Programs\hadoop_2\hadoop-2.8.3\
set HADOOP_CONF_DIR=%HADOOP_HOME%\etc\hadoop
set PATH=%PATH%;%HADOOP_HOME%\sbin;%HADOOP_HOME%\bin
set SPARK_HOME=D:\Programs\Spark\spark-1.6.3-bin-hadoop2.6\
set MAIN_CLASS=org.mai.dep810.spark.rdd.WordCount
rem start cluster command
start-all
rem stop cluster command
stop-all
rem check if file was copied to hdfs
hadoop fs -ls /
rem copy file to hdfs
hadoop fs -copyFromLocal spark-sql.txt /
rem submit spark job on cluster
%SPARK_HOME%\bin\spark-submit --class %MAIN_CLASS% --master yarn target/spark-introduction-1.0.0-SNAPSHOT.jar
Логи запуска будут доступны по адресу http://localhost:8088
Остановка кластера
Команда stop-all.cmd остановит кластер